code: function (options) {
              if (this.synced) {
                  if (!this.__isNew) {
                      var self = this;
                      return this._checkTransaction(options, function () {
                          return self.__callHooks("remove", [options], function () {
                              return self._remove(options);
                          })
                              .chain(function () {
                                  self._clearPrimaryKeys();
                                  self.__isNew = true;
                                  if (self._static.emitOnRemove) {
                                      self.emit("remove", this);
                                      self._static.emit("remove", this);
                                  }
                              })
                              .chain(function () {
                                  return self;
                              });
                      });
                  } else {
                      return when(0);
                  }
              } else {
                  throw new ModelError("Model " + this.tableName + " has not been synced");
              }
          }
docs: This method removes the instance of the model. If the model {@link patio.Model#isNew} then the promise is
  resolved with a 0 indicating no rows were affected. Otherwise the model is removed, primary keys are cleared
  and the model's isNew flag is set to true.
  
  @example
  myModel.remove().chain(function(){
  //model is deleted
  assert.isTrue(myModel.isNew);
  });
  
  //dont use a transaction to remove this model
  myModel.remove({transaction : false}).chain(function(){
  //model is deleted
  assert.isTrue(myModel.isNew);
  });
  
  @param {Object} [options] additional options.
  @param {Boolean} [options.transaction] boolean indicating if a transaction should be used when
  removing the model.
  
  @return {comb.Promise} called back after the deletion is successful.