docs: function runBefore (args, methodMeta) {
      // resolve with original args if no before extensions
      if (!defined(methodMeta.before)) {
          return Promise.resolve(args)
      }
      // wait for all extension methods to complete
      return Promise.all(
          // run all before methods in order making sure they return promise
          _.map(methodMeta.before, method => {
              return (method)(args, methodMeta.signature, 'before')
          })
      )
      // merge return values in args
      .then(results => {
          // merge each result into original args
          _.each(results, result => {
              if (typeof result === 'object' && result !== null) {
                  _.merge(args, result)
              }
          })
          // resolve with merged result
          return args
      })
  }