Custom objects will not be directly viewable, nor creatable, via a form.
You can submit the data necessary to create a CO record as a set of form fields (or, to be more tidy, a JSON block that holds all the CO fields in a single Textarea). Then call a webhook, that in turn calls the Marketo API create the CO. However, you must be attentive to API limits as you're implicitly letting any untrusted form post consume an API call. (Make sure your webhook has an appropriate resource governor.)
And, in your experience what's the best way to input data into the custom objects: api, crm sync or import?
There's no one best way, but syncing custom object/entities as part of CRM sync gives you a built-in create/update UI on the CRM side, which will not exist in Marketo.