docs: function (fn) {
      if (!fn || !_.isFunction(fn)) {
        var err = new Error('Please pass a valid function!');
        debug(err);
        throw err;
      }
  
      if (fn.length === 2) {
        this.getQueryForThisViewBuilder = fn;
        return this;
      }
  
      this.getQueryForThisViewBuilder = function (evt, callback) {
        callback(null, fn(evt));
      };
  
      var unwrappedFn = this.getQueryForThisViewBuilder;
  
      this.getQueryForThisViewBuilder = function (evt, clb) {
        var wrappedCallback = function () {
          try {
            clb.apply(this, _.toArray(arguments));
          } catch (e) {
            debug(e);
            process.emit('uncaughtException', e);
          }
        };
  
        try {
          unwrappedFn.call(this, evt, wrappedCallback);
        } catch (e) {
          debug(e);
          process.emit('uncaughtException', e);
        }
      };
  
      return this;
    }