docs: function(attrs, options) {
  
          var attr, key, eve;
          if (attrs === null) return this;
  
          if (attrs.eClass) {
              attrs = attrs.get('name');
          }
  
          // Handle attrs is a hash or attrs is
          // property and options the value to be set.
          if (!_.isObject(attrs)) {
              key = attrs;
              (attrs = {})[key] = undefined;
          }
  
          var eResource = this.eResource();
  
          for (attr in attrs) {
              if (this.has(attr) && this.isSet(attr)) {
                // unset
  
                var feature = getEStructuralFeature(this.eClass, attr),
                    isContainment = Boolean(feature.get('containment')) === true;
                var value = this.values[attr];
  
                  if (isContainment) {
                    value.eContainingFeature = undefined;
                    value.eContainer = undefined;
                  }
                this.values[attr] = undefined;
                eve = 'unset:' + attr;
                this.trigger('unset ' + eve, attr);
                if (eResource) eResource.trigger('change', this);
              }
          }
  
          return this;
      }