TestNG currently doesn’t have any data structure that can be shared by multiple <suite> objects.
But you can build your own data structure (perhaps a singleton) that keeps track of failures in a suite.
The next suite which has a dependency (you can perhaps express that dependency via a <parameter> at the suite level) would basically query your data structure using the suite name provided in the <parameter> and check its status. If the status indicates that all tests in the <suite> passed, it would proceed further, else the onStart(ISuite) (or) a @BeforeSuite method would basically throw an error and thus abort execution of the entire suite.
On a side note:
Since you mentioned parallel cucumber tests, perhaps you can give a try at a library that I built, which lets you run cucumber scenarios in parallel and also generate the json/html reports in a thread safe manner.