docs: function (clause) {
              var cond = argsToArray(arguments).slice(1), cb;
              if (cond.length && isFunction(cond[cond.length - 1])) {
                  cb = cond.pop();
              }
              cond = cond.length === 1 ? cond[0] : cond;
              if ((cond == null || cond === undefined || cond === "") || (Array.isArray(cond) && cond.length === 0 && !cb) || (isObject(cond) && isEmpty(cond) && !cb)) {
                  return this.mergeOptions();
              } else {
                  cond = this._filterExpr(cond, cb);
                  var cl = this.__opts[clause];
                  cl && (cond = new BooleanExpression("AND", cl, cond));
                  var opts = {};
                  opts[clause] = cond;
                  return this.mergeOptions(opts);
              }
          }