I actually managed to start something. If only I can link the saturation intensity to how black/white a reference layer is. Scripting maybe.
Saturation is a single value and not an array so you should be able to take the distance between the camera and the cube or a null positioned at the center of the cube and tie that to the saturation control using a linear expression. All of the language is available from the pop up expression language menu in the timeline. I'm replying with my phone so I am not going to attempt to write an expression at this time.
Ok, Saturation is a single value in the Color Balance HLS effect so you would apply that effect and then add this expression
point1 = thisComp.layer("Camera 1").position;
point2 = transform.position;
t = length(point1, point2);
s = linear(t, 1000, 2000, 0, -100);
Here's how it works. Under Vector math you find length(point1, point2) so to measure the distance, no matter what the angle between the camera and the current layer's position you define point1 and the camera's position and point2 as the layer's position. If you were using a null placed at the center of a cube then you would apply the Color Balance HLS effect to the layers you want to change saturation and define point2 as thisComp.layer("Null 1").position. Then from the interpolation menu you'll find the linear methods as linear(t, tMin, tMax, value1, value2). The length between the camera and the layer is t and so when the distance between the camera and the layer changes from 1000 pixels to 2000 pixels the saturation would go from zero or no change to -100, the maximum value to desaturate. You just have to know how far the camera is moving to achieve your desired effect.
Does that make sense???