controlling join table actions based on join table content

I have an active record association that when I delete the parent
object the ::dependent => :nullify option works correctly and sets
the FKs to nil in the join table. Is there a way to make this happen
when the record is updated too? When I remove an association from
the parent, the association is deleted instead of setting the FK to
nil.

To complicate things there are times when I would like the behavior to
be :dependent => :destroy_all (depending on what is in the join
table).

I am using has_many :through and depending on what is in my join table
I may want to destroy instead of nullify.

Is this a job for an observer on the join table or maybe overriding
the destroy method :-\

Fabricated Example (i need a better example)

overriding the Movie destroy method works fine for killing 'fixed'
contracts before ActiveRecord makes them null.

At 1st I was thinking of catching the nullify via a callback on the
Contract class (wasn't sure what I was going to do here but it appears
the nullification doesn't invoke the callbacks).

Next up. prevent location update on a movie object from deleting
transferable contracts. I guess I'll need to make locations
attr_protected and manually make updates to the contracts.