As you may have noticed the version check is done in DefaultTransactionDelegate.invokeImpl. Unfortunately there is no obvious way to exchange that functionality, but there is a possibility.

If I were you I would create a custom TransactionDelegate and override invokeImpl. There you can insert your version check. If it fails, return a VersionMismatchException as it is done in DefaultTransactionDelegate, otherwise call super.invokeImpl.

Thanks, your suggestion works, here is the code if someone is interested. Additionally, please make sure you have a customized translation for "VersionMismatchTextXY", since the original text refers to the simple standard check.