docs: function addHookFn (proto, name) {
    proto[name] = function () {
      var args = [].splice.call(arguments, 0);
      var fn = args.splice(args.length - 1)[0];
      fn = _.isFunction(fn) ? fn : undefined;
      var self = this;
      _.each(args, function (arg) {
        self.on(util.format('%s.%s', name, arg), fn);
      });
      this.analyzeListenerTree();
    };
  }