docs: function getValidOptions (options, setDefaults) {
      // make sure options is object
      options = requireValidOptionalObject(options)
      // validate automock if passed
      if (defined(options.automock)) {
          if (typeof options.automock !== 'function') {
              throw new Error('options error: automock must be function')
          }
      }
      // validate cache client if passed
      if (defined(options.cacheClient)) {
          requireValidCacheClient(options.cacheClient)
      }
      // validate log client if passed
      if (defined(options.logClient)) {
          requireValidLogClient(options.logClient)
      }
  
      // do not set default values unless flag set
      if (!setDefaults) {
          return options
      }
  
      // set defaults
      _.each(defaultOptions, (defaultOptionName, optionName) => {
          if (!defined(options[optionName])) {
              options[optionName] = immutable[defaultOptionName]
          }
      })
  
      // return options
      return options
  }