Issues with returnJson not returning html?
It appears whitespace was the cause here, just running a quick whitespace filer on the return value resolved the issue:

$userHtml = craft()-&gt;logic-&gt;renderSiteMacro('_macros/elements', 'listing', $args);

$userHtml = preg_replace('~&gt;\\s+&lt;~m', '&gt;&lt;', $userHtml);

$this-&gt;returnJson(array(
    'success' =&gt; true,
    'existing' =&gt; $userHtml
));