In my experience it is not usual to not include the filed just because it has a NULL value so I suspect this is just the way it is. I am assuming you are using the 'Collection' or 'Query' Source Type.
Another option is to 'manually' build the JSON by using the PL/SQL Source Type. Then you can create a PL/SQL block and build the JSON manually.
Just spotted, if you are building the JSON manually and using APEX_JSON.WRITE, there is a signature that gives you control over whether you write NULL fields and it defaults too not writing NULL.
p_name IN VARCHAR2,
p_value IN VARCHAR2,
p_write_null IN BOOLEAN DEFAULT FALSE );
Thank you for the hint. I developed server side using Apex Restful Services with source type Query as you assumed correctly and the problem was when I was using DataAdapter in my code to update client table - which didn't work as columns were missing in server response.
I solved it temporarily with a sort of a hack - filling null values with some other value and replacing that value on the other side with null again. But when time permits I'll look into building json using PL/SQL and APEX_JSON.Write procedure.
Though I'm curious about this feature of setting request header I wrote I found for older version of ORDS - since in version 3 there obviously still exists this undocumented feature and would perhaps come handy as in my case.