If I read it correctly, the pulseIn() timeout includes the wait time for the pulse to start (ie, the low time if we're looking for a high) as well as the time of the pulse itself (ie the high time if we're looking for a high).
An improvement might be to have two separate timeouts... let's say for instance the start of the pulse depends on human interaction, while the pulse itself doesn't. Dropping coins in a vending machine for example, there would be long waits between coins, but the pulse itself as the coin falls through a sensor would be short.
So, how about:
pulseIn(pin, value, timeout1, timeout2)
where timeout1 is before the pulse starts, and timeout2 is the pulse itself?