Most of this looks great (although I haven't actually tried it).
To answer your first question, answer me this: If someone wrote an out-of-tree filter that has a chfPluginArgString parameter and they compiled their code unmodified after you had redefined the meaning of that parameter, would they find out at compile-time that their code needs to be fixed? If they would, the redefinition is probably fine; if not, you'd need to make it so that their code would not compile.
I'm not sure yet whether I like the extra-short form, although it certainly seems clever. Please convince me that this extra code won't cause any problems, it can't cause crashes if someone feeds it some other non-JSON syntax, what error messages does it generate when fed weird stuff etc. I'm not asking you to take it out, but to justify this approach.
Most of this looks great (although I haven't actually tried it).
To answer your first question, answer me this: If someone wrote an out-of-tree filter that has a chfPluginArgString parameter and they compiled their code unmodified after you had redefined the meaning of that parameter, would they find out at compile-time that their code needs to be fixed? If they would, the redefinition is probably fine; if not, you'd need to make it so that their code would not compile.
I'm not sure yet whether I like the extra-short form, although it certainly seems clever. Please convince me that this extra code won't cause any problems, it can't cause crashes if someone feeds it some other non-JSON syntax, what error messages does it generate when fed weird stuff etc. I'm not asking you to take it out, but to justify this approach.