docs: function Sanitize(params, accepts) {
    params = params || {};
    accepts = accepts || [];
  
    _.each(accepts, function(accept) {
      var name = accept.arg;
      var val = params[name];
  
      var sanitizers = _.extend({}, accept.sanitizes);
      if (sanitizers && _.isPlainObject(sanitizers) && !isEmpty(val)) {
        _.each(sanitizers, function(sanitizerOpts, sanitizerName) {
  
          // if sanitizer is a custom function, then execute it
          // else find coorespond sanitizer in built in Sanitizer
          if (_.isFunction(sanitizerOpts)) {
            try {
              val = sanitizerOpts(val, params);
            } catch (e) {
              debug('Error: \'%s\' when calling function \'%s\'', e.message, sanitizerName);
            }
          } else {
  
            if (!sanitizerOpts) { return; }
            var sanitizer = Sanitizer[sanitizerName];
            var args = [val];
            if (!_.isBoolean(sanitizerOpts)) {
              args.push(sanitizerOpts);
            }
            args = _.flatten(args);
  
            if (sanitizer && _.isFunction(sanitizer)) {
              try {
                val = sanitizer.apply(Sanitizer, args);
              } catch (e) {
                debug('Error: \'%s\' when calling function \'%s\'', e.message, sanitizerName);
              }
            } else {
              debug('Sanitizer \'%s\' is not defined', sanitizerName);
            }
          }
        });
  
        params[name] = val;
      }
    });
    return params;
  }