What are the parameters in play, and what is a rough estimate of the hardness of the task of reading the contents of flash memory off a microcontroller? Of course, it is assumed that there is no conventional way to do it.
It largely depends on the chip and the person that programmed it. Microcontrollers usually have a feature that allows you to pull the existing firmware binary off, but in many cases that can be disabled with a so-called "secure flag", which disables the download process until a new firmware is uploaded containing directives that turn the secure flag off. Of course, this wipes the existing firmware in the process. Check the datasheet for the microcontroller for specifics.
If it's a microprocessor (as opposed to a microcontroller) then there is usually no on-chip firmware, and the program code is stored externally on a memory device. Usually this will be an EEPROM or a mask ROM which you can interface with separately. I've done this with embedded systems that use SPI flash - just desolder it and hook it up to a Bus Pirate. If you can't desolder the device, it may also be possible to sniff the bus and gain information that way.
The universal way to get at the data is decapping. You get some strong acid (nitric acid is a common choice) that will eat away and the package compound, but not the silicon, and leave it in there for a day or two. You then take photographs with a digital microscope and use image processing to turn the patterns into data.