Martinuzzi, Sebastián., William A. Gould, and Olga M. Ramos González, Creating Cloud-Free Landsat ETM+ Data Sets in Tropical Landscapes: Cloud and Cloud-Shadow Removal, United States Department of Agriculture Forest Service International Institute of Tropical Forestry General Technical Report IITF-GTR-32 February 2007.
Martinuzzi, Sebastián., William A. Gould, and Olga M. Ramos González, Creating Cloud-Free Landsat ETM+ Data Sets in Tropical Landscapes: Cloud and Cloud-Shadow Removal, United States Department of Agriculture Forest Service International Institute of Tropical Forestry General Technical Report IITF-GTR-32 February 2007.
What can be removed from these images is the effect of the haze. Dense clouds (the ones we call 'clouds') covers completely the surface, thus no radiation signal arrives from there - in this case the 'active radiating surface' is the cloud top. Haze does 'blur' in the short-wavelength channels, especially the CH1 (blue) and CH2 (green) of the Landsat. Using the data of the longer wavelength channels, e.g. by estimating the optical depth for each pixel, this effect can be reduced significantly.
The cloud shadow is another similar problem, because of the low radiance from that pixels. Here 'low' means almost uniform area with the same (minimum) count number data. You can work only on the shadow of very thin clouds or haze layers.
Check the 2012 Fmask paper by Zhu and Woodcock to produce cloud masks (Zhu, Z. and Woodcock, C. E., Object-based cloud and cloud shadow detection in Landsat imagery, Remote Sensing of Environment (2012), doi:10.1016/j.rse.2011.10.028).
This does not 'remove' cloud cover but it creates a mask that you can use to mask spurious data locations that might bias subsequent analysis / statistics. They were so nice to put a package online with either matlab or stand-alone code (http://code.google.com/p/fmask/).
If it is near complete cloud cover you can't of course. However if you are trying to classify a map and some of the area is streaked with cloud, I have found using a supervised classifier e.g in ArcGIS, to be quite effective. Simply define some training areas which contain "class X and cloud" "class Y with cloud" and so on..
It is not ideal but if you can see the different land cover classes through/between the cloud it might work.
Firstly you have to choose between classification-based approaches and physical-based approaches. Secondly, cloud over water or land?. Finally you can find many papers helping you filter out pixels contaminated by cloud. As mentioned above by Ferrarini, If you are supposed to remove cloud from water, Standard deviation of NIR, its value and even NDVI can help you (NDVI is almost 0 for many types of cloud). In case of classification approaches, your alternatives are immense.