docs: function(id, soft) {
          var comp = components[id];
          this.trigger("RemoveComponent", id);
          if (comp && "events" in comp) {
              var auto = comp.events;
              for (var eventName in auto) {
                  var fn =
                      typeof auto[eventName] === "function"
                          ? auto[eventName]
                          : comp[auto[eventName]];
                  this.unbind(eventName, fn);
              }
          }
          if (comp && "remove" in comp) {
              comp.remove.call(this, false);
          }
          if (soft === false && comp) {
              for (var prop in comp) {
                  delete this[prop];
              }
          }
          delete this.__c[id];
          // update map from component to (entityId -> entity)
          if (compEntities[id]) {
              delete compEntities[id][this[0]];
          }
  
          return this;
      }