This gets into the curious decision of whether to implement the change one time in a superseding class definition, or implementing the change multiple times in concrete-/sub-classes. There are a few things to consider when deciding how to change core logic:
- Local change or public module
- Availability & suitability of events
- Magento flavor (CE/EE), because of the number of classes extending the main
#1 is something for you answer for yourself - if it is a local change then you have less restrictions on how you implement.
#2 is generally the more extendable, cross-cutting way to get your changes done. In this case, there are none :-(
#3 is where your needs lie. Because there are no events, you are forced to consider the number of rewrites versus a proper core redefinition. For CE install there are 2 subclasses of this abstract class, so I might be inclined to just do a rewrite on those. For an EE install there are 8 subclasses, which I would be loathe to rewrite with such a gross violation of DRY.
Ultimately how you implement a definition change is subject to the criterion of maintainability, and it seems that it is more maintainable to implement this by copying the Mage_Rule_Model_Condition_Product_Abstract
to the local codepool, implementing your change, and stating this in the release notes.