If you have over seventy callbacks and custom validations, then the problem is hardly in the callbacks per se...
Moving them elsewhere doesn't solve the problem of complexity, it merely shoves it under the rug.
If you intend to use Commands, use commands, but do not monkeypatch the AR - callbacks may be bad, but monkeypatching is worse. This also violates principle of least surprise.
A better alternative might be Concerns. You get to hide'n'keep all the good stuff without needing to monkeypatch the guts.
Another alternative is to use a custom validator class that encapsulates and performs all the intended validations and a callback class handler which you call on a single before_save callback in the model itself.
class Foo < ActionRecord::Base
validates_with Validators::Foo
before_save Callbacks::Foo.new
end
That way you extract and encapsulate callbacks and validation and avoid monkeypatching the core AR class.
If you're having a hard time understanding your callbacks, your validations, and your code, consider adding comments and structuring/sorting/grouping them in the order they are executed. Yes, that requires discipline. Yes, shoving the problem under the rug is simpler that getting self-disciplined.
But.
There is one thing that people tend to forget about: you are not the first one working on this code, and you won't be the last. There will be other devs after you who will look at this and their WTF-per-minute meter will be going through the roof. Principle of Least Surprise all the way, all the way...