From what I understand, A button's event hander typically happens in the invoke application phase, which is after validations. When you make a button immediate, its event handlers execute in the apply request values phase (which is before validations).
So you might want to add the following method
protected void beforeApplyRequestValues() {
l// operations you want before validations
}
However, as far as I know, if a button is set as immediate, the only validations that occur will happen on input fields that also have immediate set to true.
Maybe you could explain more about your scenario. Perhaps virtual forms would be a better solution. Or maybe this suggestion: http://blogs.sun.com/jayashri/entry/conditional_validation_on_button_click