I think the proposal looks good but I have a few observations:
* Callbacks should have the parameters swapped. This will go inline with the rest of the framework, as we are now defaulting to passing all event params to listeners.
* Custom finders and magic methods should not receive as first parameter the table object as in 2.x, this would mean that the table instance should be stored in the behavior automatically for easy access.
* We should introduce new callbacks to operate on a bath level for beforeSave and afterSave. I often do more things using batches than working directly with each row.
I think there should be no validation callbacks at all, in 2.x they were abused to implement setters or to do actual validation. This had several problems in my view, one is that setters would not be triggered if anyone skipped the callbacks or set validation to false, and the other is that it would break the validation chain.
Setters can be placed easily in the entity class, and validation should be done using the validation API.
@ADmad the omission of afterFind is intentional. Any record level change should be done in the entity. Any aggregation can be done using the map - reduce API
I agreed with ADMad selection of behaviors. I would personally like a default implementation of a SoftDelete behavior.