The frame_delay value is something you should set manually per game, not in mame.ini. This is because you need to find the highest value that keeps the emulation speed solid, and this is different for each game and each system.
Cools is recommeding using frame_delay 1 because by simply enabling frame_delay with something greater than zero, it bypasses a frame queue that's built in the video drivers when D3D is used.
The risk of doing this is that it becomes possible that several frames of emulation get into the same vertical retrace, specially if the emulation of a given game is fast enough on the target CPU. This results in an accelerated speed.
Besides, the original reason to use frame_delay was not bypassing the frame buffer (which is nice) but to actually delay the emulation of a frame, which only starts making sense if you use a value of at least 4 or 5.
To avoid this risk you can switch to DirectDraw, that is able to force each frame to match consecutive vertical retraces. However, DirectDraw has not a built-in frame queue, so again using a value of 1 doesn't help much in this case.
If you want, you can keep D3D and increase the value in mame.ini to 2. That will probably be enough to get the benefit of bypassing the frame queue and prevent the risk of vertical retrace re-entry. But you will penalize the emulation speed of games that are in the limit of your CPU's capability.