code: function() {
      // Check for unknown attributes
      var key, unknownAttrs = []
      for (key in obj) {
        if (!self.validators.hasOwnProperty(key))
          unknownAttrs.push(key)
      }
      if (unknownAttrs.length)
        self._merge(validationErrors, 'unknown attributes [' + unknownAttrs.join(', ') + ']', prefix)
        //validationErrors[prefix || '.'] = 'unknown attributes [' + unknownAttrs.join(', ') + ']'
  
      // Run the `after` hook only if there is no validation error.
      if (isValid && self.after) {
        try {
          self.after.call(obj)
        } catch (err) {
          if(!_handleError(err)) return done(err)
        }
      }
      done(null, validationErrors)
    }
docs: ====== (step III) ====== Final validations, run the `after` hook, etc ...