docs: function ImmutableCoreService (args) {
      // require valid args
      this.assert(typeof args === 'object', 'args must be object')
      // require name for service
      this.assert(typeof args.name === 'string', 'name required')
      // set service name
      this.name = args.name
      // build module name from name
      this.moduleName = `${this.name}Service`
      // instantiate module - will throw error if name already defined
      this.module = ImmutableCore.module(this.moduleName, {})
      // require initialize function
      this.assert(typeof args.initialize === 'function', 'initialize function required')
      // create initialize method
      this.module.method('initialize', args.initialize)
      // make sure service not already registered
      this.assert(!this.hasService(this.name), 'service ${this.name} already registered')
      // add service to global register
      this.getServices()[this.name] = this
      // add any additional methods
      _.each(args.methods, (method, methodName) => {
          // add immutable method to service
          this[methodName] = this.module.method(methodName, method)
      })
      // if reinitialize interval is set then validate
      if (defined(args.reinitializeInterval)) {
          // validate
          this.assert(!Number.isNaN(parseInt(args.reinitializeInterval)), 'reinitializeInterval must be integer')
          // set value
          this.reinitializeInterval = parseInt(args.reinitializeInterval)
      }
      // default to 0 - do not reinitialize
      else {
          this.reinitializeInterval = 0
      }
  }