Ode Golf - Letter Deletions
JavaScript (ES6), 225

A function with a string parameter, no input from file. I asked OP if this could be valid.

Test running the snippet in an EcmaScript 6 compliant browser (implementing arrow functions, template string, spread operator - Firefox, maybe Safari or MS Edge, not Chrome)



f=t=&gt;t.split`
`.map(w=&gt;(d[k=w.replace(/\W/g,'').toLowerCase()]={},k),d={},r=[]).map(w=&gt;[...w].map((c,i,v)=&gt;(d[v[i]='',x=v.join``]&amp;&amp;!d[x][w]&amp;&amp;r.push(d[x][w]=(v[i]=`(${c})`,v.join``)),v[i]=c)))&amp;&amp;r.sort((a,b)=&gt;a.length-b.length)

// LESS GOLFED

Q=t=&gt;{
  // convert to canonical form and put in a dictionary
  // each value in the dictionary is an hashtable tha will store the list
  // of words that can generate the current word, removing a letter
  d={},
  t=t.split`\n`.map(w=&gt;(k=w.replace(/\W/g,'').toLowerCase(),d[k]={},k))
  r=[], // result array 
  t.forEach(w =&gt;
    [...w].forEach((c,i,v)=&gt;( // for each letter in word, try to remove
      v[i]='', x=v.join``, // build string with missing letter
      v[i]='('+c+')', y=v.join``, // and build string with brackets
      v[i]=c, // restore the current letter
      d[x] &amp;&amp; // if the word with removed letter is present in the dictionary
      !d[x][w] &amp;&amp; // and not already from the same generating word
         r.push(d[x][w]=y) // update dictionary and add word to result array
    ))
  )
  return r.sort((a,b)=&gt;a.length-b.length) // sort result by length
}  

// TEST
function test() { R.innerHTML=f(I.value) }
textarea { height: 20em }
Test &lt;button onclick="test()"&gt;-&gt;&lt;/button&gt;
&lt;span id=R&gt;&lt;/span&gt;
&lt;br&gt;&lt;textarea id=I&gt;cat
cart
code
golf
node
scraped
scrapped
verify
versify
mart
mar
mat
ma&lt;/textarea&gt;