docs: function (options, callback) {
                  if (options instanceof Function) {
                      callback = options;
                      options = {};
                  }
  
                  options = options || {};
  
                  _.defaults(options, {
                      setErrors: true,
                      reset: true,
                      fields: null
                  });
  
                  var self = this;
  
                  var validators = [], validator;
                  for (var i = 0; i < this.validators.length; i++) {
                      validator = this.validators[i];
                      if (options.fields && options.fields.length > 0) {
                          if (options.fields.indexOf(validator.$.field) > -1 || validator.$.field == null) {
                              validators.push(validator);
                          }
                      } else {
                          validators.push(validator);
                      }
                  }
  
                  var validationErrors = [];
  
                  flow()
                      .parEach(validators, function (validator, cb) {
                          validator.validate(self, options, function (err, result) {
                              if (!err && result) {
                                  if (result instanceof Validator.Error) {
                                      validationErrors.push(result);
                                  } else if (result instanceof Array) {
                                      validationErrors = validationErrors.concat(result);
                                  }
                              }
                              cb(err);
                          });
                      })
                      .exec(function (err) {
                          if (options.setErrors === true) {
                              self._setErrors(validationErrors, options);
                          }
                          callback && callback(err, validationErrors.length === 0 ? null : validationErrors);
                      });
  
              }