It's only a suggestion, but you might try to implement a system that zooms depending on how long the user pressed the zoom button. I think it would be nice to make the content zoom along with the mouse button. So, as long as the user holds the mouse button/keyboard button pressed, keep zooming smoothly and slowly enough to make sure the user has to ability to release the button in time.
I think the zoom speed should depend on the size of the content. How larger how faster is zooms. But ensure you have a nice maximum zoom speed. This, in combination with the current zoom factor. I would slow down zooming slowly.
It's just an idea. I don't know if it will be cool, but I think it is worth trying it, if this is applicable for your situation.