I finally found a solution to do what I wanted in the first place.
I use the CLASS_CONSTRUCTOR method to read all my master data (class constructor is only called once for all the validations) and store them in CLASS level variables.
To distinguish between the first execution of the UJ_VALIDATION BADI and subsequent calls from the Script Logic, I check the content of the ABAP CallStack. It's not a perfect solution, but it seems to work well.