I don’t know if there are any tutorials but creating a new importing factory isn’t too bad. You create a subclass of UFactory, configuring things like the supported file type in the constructor. If you can create a new asset without having a source file, you implement FactoryCreateNew and set bCreateNew to true. If you can import an asset from disk, implement either FactoryCreateText or FactoryCreateBinary, depending on if your source file is ASCII or not. Most of the editor factories are in the uber-file EditorFactories.cpp, which really needs to be split up
You can create a UI with options when importing, but ideally that isn’t necessary, since it results in a less ‘fun’ workflow, causes issues when drag-dropping multiple assets at once, etc… For UFont construction, I’d check out UFontFactory and UTrueTypeFontFactory, but it might be worth skimming thru a simpler factory first to get the gist of things.
Later on, you can add support for reimporting by mixing in FReimportHandler and implementing that interface (you’ll also need to store a subclass of UAssetImportData on your asset in order to keep track of the source path/etc…). I haven’t implemented this myself yet, so I’m not 100% on all the details, but let me know if you have any questions.