De-Parenthesizing a String
JavaScript ES6, 91 93 104 133 148

Edit2 2 bytes saved thx user81655

Edit Using more strings and less arrays 

Test running the snippet below in an EcmaScript 6 compliant browser



f=s=&gt;[...s].map(c=&gt;l+=c&lt;')'||-(o[l]=(o[l]||'')+c,c&lt;'a'),o=[],l=0)&amp;&amp;(o+'').match(/\w+/g)||[]

// Less golfed

u=s=&gt;{
  o=[]; l=0;
  [...s].map(c=&gt;{
    if (c&gt;'(') // letters or close bracket
      o[l]=(o[l]||'')+c, // add letter or close bracket to current level string
      l-=c&lt;'a' // if close bracket, decrement level
    else
      ++l // open bracket, increment level
  })
  o = o+'' // collapse array to comma separated string
  return o.match(/\w+/g)||[] // fetch non empty strings into an array
}

// TEST
console.log=x=&gt;O.innerHTML+=x+'\n'

;[ 'a(b)c(d)e'                    // ['ace', 'b', 'd']
 , 'a(b(c)d)e'                    // ['ae', 'bd', 'c']
 , 'a((((b))))'                   // ['a', 'b']
 , 'a()b'                         // ['ab']
 , ''                             // []
 , 'a'                            // ['a']
 , '(((a(b)c(d)e)f)g)h'           // ['h', 'g', 'f', 'ace', 'b', 'd']
 , 'ab(c(((d)ef()g)h()(i)j)kl)()' // ['ab', 'ckl', 'hj', 'efg', 'i', 'd']
].forEach(t=&gt;console.log(t +" -&gt; " + f(t)))
&lt;pre id=O&gt;&lt;/pre&gt;