So, yes, if you want to replace the top_menu.tpl template completely, you can do it by extending the \XLite\View\Menu\Customer\Top::getDefaultTemplate( ) method in your module and pointing it to your template file under the skins/default/en/module/[YOUR-DEV-ID]/[YOUR-MODULE-ID]/ directory.
Or you can do it by registering a new skin (
http://kb.x-cart.com/display/XDD/Substitutional+skins) and placing your top_menu.tpl under the skins/[YOUR-SKIN/en/ directory (no need to decorate the Top.php widget).
However, since top_menu.tpl is a somewhat generic file it will be better to keep the template file unmodified, and stick to decorating the Top.php widget in your module.