docs: function(key, val) {
      if (arguments.length === 1) {
        if (typeof key === 'string') {
          if (key.indexOf('.') === -1) {
            return this.cache.data[key];
          }
          if (lazy.isGlob(key)) {
            this.compose('data')(key, val);
            return this;
          }
          return lazy.get(this.cache.data, key);
        }
      }
  
      if (typeof key === 'object') {
        var args = [].slice.call(arguments);
        key = [].concat.apply([], args);
        this.visit('data', key);
        return this;
      }
  
      lazy.set(this.cache.data, key, val);
      this.emit('data', key, val);
      return this;
    }