Based on your latest finding, it seems the behavior of R, G, and B is not independent from each other. (Otherwise the method I proposed should work.) Even from the internal camera processing point of view, this is weird. I think some more tests are needed to understand the exact behavior. I will see if I can find time to do some experiments on my D800 (with hacking disabled). The problem seems worse on D800, meaning that it might be easier to catch what's really going on.
The sky flat method is what I constantly do when I use large telescopes for near-IR (1 to 2 micron). The difference is that our typical targets are point-like distant galaxies and we took lots of dithered exposures. So, synthetic flats can be very easily created from the dithered images themselves, without spending extra time on empty spots of sky. Unfortunately this will not work on amateur images, since we almost always image targets that occupy large portions of images. However, there might be a workaround.
Some 15 years ago, I developed a flat-field method for film images. The first step is to just shoot a normal flat on daytime sky using the same optics. For the problem we want to solve here, this flat can be a regular flat taken with whatever appropriate exposure time and light source (doesn't have to match the night sky).
The second step is to go to the to-be-flattened night sky image and sample a good number (20 to 40) of "blank" sky areas, just like what we do in DBE in PixInsight. Then we can use the RGB brightness and the locations of these blank sky areas to "twist" the flat, using a 2-D surface determined by those blank areas, to force the flat to look like the sky background in the celestial image.
This way, the flat image taken in the first step provides the overall shape of the illumination pattern, including vignetting from the optics and camera and even the pixel-to-pixel response variation on the sensor. The twisting in the second step corrects for whatever nonlinear effect in the sensor response.
There are two potential problems of the this method. The first one is that in a perfectly linear system, the 2D surface found in the second step should be just a flat surface. In reality, even if the system is perfectly linear, the surface will not be flat because of the existence of sky gradient. In some sense, this can help to correct for the gradient, but this isn't really the right thing to do, as gradient removal should be subtraction, not division, and to model the gradient it can sometimes require many more sample points.
The second drawback is that unlike film images, we took many dithered subs using digital sensors. This means the locations of the sample points for blank sky move from one sub to another. This is where the synthetic sky flat can come to rescue. We can just take a few exposures on the empty parts of the sky during the imaging session with the same exposure setting. Then from these few exposures, using median stacking plus rejection, we can create a low-S/N sky flat, mostly free from celestial objects. This low-S/N flat can be used to construct the surface for nonlinearity correction and then be applied to the high-S/N flat we took in the first step. Here, probably the entire image can be used, instead of just using a few sample points. This way, it doesn't matter if our real subs are dithered around, and it doesn't matter if the sky-flat has low S/N.
Anyway, I gave the synthetic sky flat a lot of thoughts when I encountered my D800 problem. If we try hard, we should be able to find a solution, but I rather prefer this to be solved at the raw image level.
I really hope I can have a chance to sit down with a Nikon engineer in charge to talk about this face to face in details. I don't believe writing to their customer service can be of any help.
Cheers,
Wei-Hao