This is not a solution but a workaround:
One way (simple) is to begin your script "/bin/flashled.sh" like this
#!/bin/bash
#this file is /bin/flashled.sh
#let's exit if another instance is already running
if [[ $(pgrep -c "$0" ) -gt 1 ]]; then exit ;fi
... ... ...
However, this can in some border cases be a bit prone to race conditions (bash is a bit slow so there is no way to be sure that this will always work) but it might work perfectly in your case.
Another one (more solid but more code) is to begin "/bin/flashled.sh" like this:
#!/bin/bash
#this file is /bin/flashled.sh
#write in your /etc/rc.local: /bin/flashled.sh & ; disown
#or let it start by init.
while :
do
kill -SIGSTOP $$ # halt and wait
... ... # your commands here
sleep $TIME # choose your own value here instead of $TIME
done
Start it during boot (by, for example, /etc/rc.local) so it will be waiting for a signal to continue... It doesn't matter how many "continue" signals it gets (they are not queued), as long as they are within $TIME
Change your udev rule accordingly :
SUBSYSTEMS=="usb", ATTRS{serial}=="00000000", SYMLINK+="Kingston", RUN+="/usr/bin/pkill -SIGCONT flashled.sh"