You can use afterValidate as well, there are no difference.
My suggestion was just because I consider more polite use the 'standard instrument' like rules instead of override the framework function, but is a pure question of style, no difference at all.
If you get validate many time is because you set the rule for more 3 attributes, so the rule will be applied to all attributes, 3 times. You have 2 options: create an attribute depending validate function or create a single function for all field to validate (function to be called once, so only one attribute should figure in rules).
Attribute depending is like that:
public function carCheck($attribute)
Like that carCheck is a 'conditional required', you can add as parameters you want and they will be checked if vehicle car is selected. You will add all attributes in rule like all standard rules.
Note that if more than one vehicle type is selected and all this vehicle type require an attribute, them the attribute will validated more than one time.
If you are in this situation is better to write a single function for all 'conditional required' field, create an array of field to validate and validate them all one time.