First I would make tests with code that is a lot less complex than this. I think that I understood what your code does, but I guess you are not getting any answers since you have so much unnecessary data and code shown that the real problem is very hard to understand.
Why for example you are telling about the validator if you really want to update some field inside a loop to disabled state? Or is the validator itself doing the update? Are you sure that it is the right way to do that? As I said, the code is hard to understand.
Validation is performed before the actual action gets executed and if validation fails then the action itself never gets executed. But you know that. At least you can try to add more debugs throughout the code to see if everything happens in the same order and way you presume it does.