code: function(prop, value, type) {
      if (utils.typeOf(prop) === 'object') {
        var obj = prop;
  
        var keys = Object.keys(obj);
        for (var i = 0; i < keys.length; i++) {
          var key = keys[i];
          this.fillin(key, obj[key], type);
        }
      } else {
        var val = this.option(prop);
        if (typeof val === 'undefined' || (typeof type === 'string' && utils.typeOf(val) !== type)) {
          this.option(prop, value);
        }
      }
      return this;
    }
docs: Set option `key` with the given `value`, but only if `key` is not
  already defined or the currently defined value isn't the same type
  as the javascript native `type` (optionally) passed as the third
  argument.
  
  ```js
  app.option('a', 'b');
  
  app.fillin('a', 'z');
  app.fillin('x', 'y');
  
  app.option('a');
  //=> 'b'
  app.option('x');
  //=> 'y'
  ```
  @param {String} `key`
  @param {any} `value`
  @param {String} `type` Javascript native type (optional)
  @return {Object}
  @api public