docs: function(property, level /* fields */) {
  
              var propertyContainers = [];
  
              if (this.hasOwnProperty(property)) {
                  propertyContainers.push(this[property]);
              }
  
              if (this.__proto && this.__proto.hasOwnProperty(property)) {
                  propertyContainers.push(this.__proto[property]);
              }
  
              var parent  = this.__parent;
  
              while (parent) {
                  if (parent.hasOwnProperty(property)) {
                      propertyContainers.push(parent[property]);
                  }
                  parent = parent.__parent;
              }
  
              var fields = _.toArray(arguments).slice(2);
              var propertyValues = {};
  
              for (var i = 0, ii = propertyContainers.length; i < ii; ++i) {
                  this.__collectValues(propertyValues, propertyContainers[i], level || 1, fields);
              }
  
              return propertyValues;
          }