So, immediate works exactly like it should according to JSF 1.2 spec.
Yes, it was a problem in 3.1.4. We could not use the standard JSF API as soon as we had to support not only JSF 1.2, but JSF 1.1 as well. So, instead of using standard API, we used own hack that emulated the behavior. The used approach had some side effect (undocumented feature) that you used to use with 3.1.4. Now, this side effect is gone.
Sorry, but we are not willing to return it back because:
1. it is impossible with standard JSF 1.2 API
2. it is against the JSF 1.2 spec
RichFaces has 'process' attribute that allows to point to other component that should processed together with command component marked like ajaxSingle (ajaxSingle is the same as immediate=true from the behavior point of view)
So, if understand what you want to do, you need to:
1. replace immediate with ajaxSingle
2. add 'process' attribute to each next call (as an attribute of a4j:support) that point to the above component should be processed.
P.S. process attribute has two limitations:
1. it works only if ajaxSingle="true" is defined for given command component
2. you do not have to point to one of the own parent components to avoid processing of command component twice.