Define properties as JSON array. Each property has a "name" and optional "values" array.
If "values" is null, users can enter freeform text. If "values" is an array, users select from dropdown.
Example: [{"name":"Size","values":["S","M","L"]},{"name":"Colour","values":null}]