Physics is SO COOL! I removed the haze from each channel of your photo, increased that channel's contrast to bring the highlights back to where they should be, then re-merged the channels. Here's the result:
Here's the split channels & the brightness distribution for each.
I assumed each histogram's leftmost peak was due to haze, so I subtracted that peak intensity level (154, 130, 86, for B,G,R) and renormalized (255/(255-154), 255/(255-130), 255/(255-86).) - I really should have used the foot of the leftmost peak rather than its maximum I think.
I'd say that your first approach should be to get a good UV filter to take the original which will knock a lot of the blue haze out, then apply BGR corrections if necessary.
It is gratifying that these corrections could be done automatically, without peeking! Fundamentally this is no different from PBO's approach above, except for being analytic in nature. I did not apply any noise reduction or sharpening, which would greatly improve the result.
Dave in Iowa
PS a good strategy might be to assume that there should be black in each color channel, then subtract sufficient light from each channel to enforce that assumption followed by assuming there should be a white spot somewhere and multiplying by appropriate factors to assure that result.