I sell a shirt and the customer wants to customize the shirt. Color, pattern, image.
Is there a way I can allow free form text field on the product page that will attach to the order so that the customer can have their own version of a product
Yes. At the global level you define a Product Attribute called, for example called 'Personalisation'. Then on the setup of each shirt product you add a mapping to the Product Attribute 'Personalisation' and set the control type you want it to be displayed as (Single Text Box, Multi-line text box', File Uploader etc.). This attribute is them available on the store Product page, and carries through on basket and checkout.