You are calling checkString() from inside flash(), but then that recursively calls flash() again. I don't think that's what you want. Are the other two functions working as you expect?
I don't want to be a jerk, but I think the problem here is the design. In my opinion, you need to get the arduino to do the flashing for you as a background operation, that way you just turn it on or off same as the other functions. Don't let that discourage you, because we can probably get it to work without doing that yet by reversing your approach.
Perhaps we could look at the problem from the standpoint that you spend most time flashing the LED and then checking for a client connection each loop. It's not the best way to do it, but it should work. You can't really call checkString() unless you have a new string to look at and that only happens when you get a new client connection. I also notice that you spit back the HTML form before processing the request, this precludes you from sending some feedback to the user about what happened should you later want to.
Save your existing sketch somewhere new, because we are about to perform major surgery on its structure. It's time to simplify your loop() by calling functions instead of having all that code in it. Here is some pseudo code for what I'm talking about:
loop()
if(flashing)
turn on LED
delay(100)
turn off LED
delay(100)
endif
checkForClient()
end loop()
checkForClient()
if(client)
read request
handle request
endif
end checkForClient()
It's not the most responsive way to do it, but it should get the job done. Client processing will be delayed up to 200mS while the LED is toggled. Does this make any sense?