You didn't get any other answers, so I'll give it a try. I don't know anything about flex, but this should probably be doable:
1) The user selects an area (For argument's sake it is a circle)
2) You average the color values of the edges of the circle and store that color.
3) Do a Gaussian blend between the image and the calculated average color of the perimeter. That is, blend the center of the circle much more than the edges. The amount of blending should fade to nothing as you get closer to the edge. This should keep you from getting faint circle shapes on your image. This will also help prevent darkening as the blemish color will not be part of the averaging process.
Good Luck!
Edit
Here is some psudocode on the blending operation.
for (each pixel)
{
blendingConstant = [A number between zero and one which is close
to 1.0 near the edge of the circle, and approaches a threshold
value the closer you get to the center];
pixelColor = (blendingConstant * pixelColor + ( 1.0 - blendingConstant ) * averagePerimiterColor);
}
The threshold value may be zero, it may not. You will have to play with it until it looks right.