This is an interesting piece of code. I'll describe what I can see, I know you already know this but I'm just trying to follow the steps.
In theory, org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer look for the components, get its clientIds, and finally pass them as params when writing the js code related to the ajax operation.
In this case, the values passed in "javax.faces.partial.render" request parameter, which are the same that were calculated before are just ignored, and the values used for identify the affected client behavior, which are used in the decode process (see org.apache.myfaces.shared.renderkit.html.HtmlRendererUtils.decodeClientBehaviors() ), are used to calculate the affected components, but the good part is if you use c:if to skip components from the component tree, they will not be used.
There is not any reference in the spec about this. "In theory", include it will not cause any side effects more than solve the problem described here. The only thing that suppose a problem is this propose a different behavior from the one found in the RI (Mojarra), maybe not thought by the EG when the spec was built.
I don't know what to do in this case. A custom <f:ajax> component with this behavior in mind sounds better for me than change the default behavior. Any thoughts?