Thanks Hemant Arora
Unfortunately I had already tried most of the suggestions on the decoration-tag page. I still have an unwanted <cq> tag I can't seem to hide and which contributes to our issue.
1. cq:noDecoration affected my parsys such that adding content items results in them being added as siblings alongside the parsys rather than child elements.
2. Adding a node of type nt:unstructured called cq:htmlTag under parsys seemed to have no effect. Adding cq:htmlTag under the parsys/new component produced custom tags but upset the parsys drag and drop area such that it doesn't show on the page.
3. Trying a Sightly dynamic approach unfortunately doesn't work either: we only see the problem in preview mode but with sightly similar to the snippet below I still seem to have the unwanted <cq data-path=...> element - for the containing parsys - and which contains the bad json at the root of our problem).
<sly data-sly-test="${wcmmode.edit}">
<div>
<sly data-sly-resource="${'foopar' @ resourceType='foo/components/widget/external/parsys', decoration='true'}"></sly>
</div>
</sly>
<sly data-sly-test="${!wcmmode.edit}">
<sly data-sly-resource="${'foopar' @ resourceType='foo/components/widget/external/parsys', decoration='false'}"></sly>
</sly>