Spawning child processes and event-listening
First of all, I think spawning a child process just to scrape for links is overkill. If you're scraping links from multiple online pages, the bottleneck isn't the processing speed but your network latency. Once you grab the page contents, scraping a page is a breeze. A single node process written asynchronously can do this easily.

Now if you really need to spawn that child process, then I might suggest you use Promises, arrow functions and the latest version of node to make this code a bit more compact. Use template strings to construct strings instead of concatenation. Don't forget to define var/let/const.

function scrapeLinks(location) {

  return new Promise((resolve, reject) =&gt; {

    var processData = "";
    var errors = "";
    var command = `casperLinkScript.js ${location}`;
    var linkScrapeChild = child_process.spawn(casperjsPath, command);

    linkScrapeChild.stdout.on('data', (data) =&gt; processData += data.toString());
    linkScrapeChild.stderr.on('data', (err) =&gt; errors += err.toString());
    linkScrapeChild.on("error", (err) =&gt; errors = err.toString());
    linkScrapeChild.on('close', function onScrapeProcessExit(code) {

      var uniqueLinks = [...new Set(filterLinks(convertToArray(processData)))];

      if (!uniqueLinks.length) errors += `No valid listings found for ${location}`;

      if (errors)
        reject({ code, errors });
      else
        resolve({ code, uniqueLinks });
    });
  });
}

// Usage
scrapeLinks('http://yahoo.com').then((result) =&gt; {
  // result.code
  // result.uniqueLinks
}, (result) =&gt; {
  // result.code
  // result.errors
});