code: function getMethod (signature, method, options) {
      // convert signature string to method and function name
      signature = getValidSignature(signature)
      // get module
      var module = immutable.modules[signature.moduleName]
      // throw error if module not defined
      if (!defined(module)) {
          throw new Error(`method error: module not found ${signature.signature}`)
      }
      // if method not passed then attempt to get existing
      if (!defined(method)) {
          // throw error if method not defined
          if (!defined(module[signature.methodName])) {
              throw new Error(`method error: method not found ${signature.signature}`)
          }
          // return method
          return module[signature.methodName]
      }
      // get validated options, do not set defaults which will come from module
      options = getValidOptions(options)
      // attempt to create new module method
      method = module.method(signature.methodName, method, options)
      // do binds for method
      doBindForMethod(signature.signature)
      // set cache rules for method
      doCacheForMethod(signature.signature)
      // return method
      return method
  }
docs: @function getMethod
  
  get and optionally create a new method. if method object is passed then
  new module will be created, otherwise existing module will be returned.
  
  errors will be thrown on attempts to create multiple modules or methods
  with the same name as well as if attempting to use the reserved words
  defined in get-valid-name.
  
  error will be thrown in attempting to get method that is not defined.
  
  @param {string} signature - ModuleName.methodName of method
  @param {object} method - method function (optional)
  @param {object} options - options (optional)
  
  @returns {function} - method function
  
  @throws {Error}