Script delay is primarily intended to slow down continued use of "expensive" commands, to prevent "spamming" of updates.
Often, a script needs to invoke one of these "expensive" commands a single time, and then continue to run its normal operation. In cases where the imposed script delay is practically not acceptable, it just forces the sub-optimal use of slave scripts and message passing; it does nothing to actually limit the use of the command.
I propose that the delay is deferred until the next time the command is called, and then take place before the command executes. That would, for example, allow a script to send a single email and continue it's normal running. Only if llEmail was called again inside the normal 20 second period would the script be delayed, based on the remaining time in the "quarantine period".
This would overall preserve the general semantics of the delay, but mitigate the excessive use of slave scripts.
The delay should probably be based on groups of functionality, based on the resource they potentially "spam". (So people don't, for example, switch between llSetPos and llSetPrimitiveParams to get around it).
I have seen many discussions on script delay, but didn't find this version, so I thought I'd throw it in.