```js
obj[this.accessors.remove] = function(oldAssociatedObject) {
  var instance = this
  var customEventEmitter = new Utils.CustomEventEmitter(function() {
    instance[self.accessors.get]().success(function(currentAssociatedObjects) {
      var newAssociations = []
        , oldAssociations = []

      currentAssociatedObjects.forEach(function(association) {
        if (!Utils._.isEqual(oldAssociatedObject.identifiers, association.identifiers)) {
          newAssociations[newAssociations.length] = association
        } else {
          oldAssociations[oldAssociations.length] = association
        }
      })

      oldAssociations.forEach(function (oldAssociation) {
        oldAssociation.destroy.error(function (err) {
          return customEventEmitter.emit('error', err)
        }).success(run)
      })

      var run = function() {
        instance[self.accessors.set](newAssociations)
          .success(function() { customEventEmitter.emit('success', null) })
          .error(function(err) { customEventEmitter.emit('error', err) })
      }

      // If length is 0, run is executed immediately
      run = _.after(oldAssociations.length, run)
    })
  })
  return customEventEmitter.run()
}
```

I am totally wrong in saying that this would work (There might be legitimate reasons for your way, so don't hesitate to disagree :P)