You can add a static Content Editor Web Part to your master page and then set it to load that content from an external file.
Here's some steps based off of a quick experiment I just did - I used SharePoint designer for this.
- Add a ContentPlaceHolder to your master page where you want this content to go.
- Insert a Content Editor Web Part into this content placeholder.
- Set the CEWP's ChromeType to None and set it to load its content from /Documents/menu.html (or wherever your HTML is located).

After that, you should be set. Here's the code that these steps generated in my master page:
<asp:ContentPlaceHolder ID="PlaceHolderCopyright" runat="server">
<WebPartPages:ContentEditorWebPart webpart="true" runat="server" __webpartid="{3762918C-2C41-41CD-8531-C8834D56C256}">
<WebPart xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/WebPart/v2">
<Title>Content Editor</Title>
<FrameType>None</FrameType>
<Description>Allows authors to enter rich text content.</Description>
<IsIncluded>true</IsIncluded>
<PartOrder>0</PartOrder>
<FrameState>Normal</FrameState>
<Height />
<Width />
<AllowRemove>true</AllowRemove>
<AllowZoneChange>true</AllowZoneChange>
<AllowMinimize>true</AllowMinimize>
<AllowConnect>true</AllowConnect>
<AllowEdit>true</AllowEdit>
<AllowHide>true</AllowHide>
<IsVisible>true</IsVisible>
<DetailLink />
<HelpLink />
<HelpMode>Modeless</HelpMode>
<Dir>Default</Dir>
<PartImageSmall />
<MissingAssembly>Cannot import this Web Part.</MissingAssembly>
<PartImageLarge>/_layouts/images/mscontl.gif</PartImageLarge>
<IsIncludedFilter />
<ExportControlledProperties>true</ExportControlledProperties>
<ConnectionID>00000000-0000-0000-0000-000000000000</ConnectionID>
<ID>g_3762918c_2c41_41cd_8531_c8834d56c256</ID>
<ContentLink xmlns="http://schemas.microsoft.com/WebPart/v2/ContentEditor">/SiteAssets/test.html</ContentLink>
<Content xmlns="http://schemas.microsoft.com/WebPart/v2/ContentEditor" />
<PartStorage xmlns="http://schemas.microsoft.com/WebPart/v2/ContentEditor" />
</WebPart></WebPartPages:ContentEditorWebPart>
</asp:ContentPlaceHolder>
<asp:ContentPlaceHolder ID="PlaceHolderCopyright" runat="server">
<p></p>
<WebPartPages:ContentEditorWebPart webpart="true" runat="server" __webpartid="{3762918C-2C41-41CD-8531-C8834D56C256}">
<WebPart xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/WebPart/v2">
<Title>Content Editor</Title>
<FrameType>None</FrameType>
<Description>Allows authors to enter rich text content.</Description>
<IsIncluded>true</IsIncluded>
<PartOrder>0</PartOrder>
<FrameState>Normal</FrameState>
<Height />
<Width />
<AllowRemove>true</AllowRemove>
<AllowZoneChange>true</AllowZoneChange>
<AllowMinimize>true</AllowMinimize>
<AllowConnect>true</AllowConnect>
<AllowEdit>true</AllowEdit>
<AllowHide>true</AllowHide>
<IsVisible>true</IsVisible>
<DetailLink />
<HelpLink />
<HelpMode>Modeless</HelpMode>
<Dir>Default</Dir>
<PartImageSmall />
<MissingAssembly>Cannot import this Web Part.</MissingAssembly>
<PartImageLarge>/_layouts/images/mscontl.gif</PartImageLarge>
<IsIncludedFilter />
<ExportControlledProperties>true</ExportControlledProperties>
<ConnectionID>00000000-0000-0000-0000-000000000000</ConnectionID>
<ID>g_3762918c_2c41_41cd_8531_c8834d56c256</ID>
<ContentLink xmlns="http://schemas.microsoft.com/WebPart/v2/ContentEditor">/SiteAssets/test.html</ContentLink>
<Content xmlns="http://schemas.microsoft.com/WebPart/v2/ContentEditor" />
<PartStorage xmlns="http://schemas.microsoft.com/WebPart/v2/ContentEditor" />
</WebPart></WebPartPages:ContentEditorWebPart>
</asp:ContentPlaceHolder>
Hope this helps! You could also use JavaScript to dynamically load in content if the above approach isn't what you're looking for.