Thanks Krishnan for such detailed response.
So as far as I understand, keeping WebDriver instance as ThreadLocal in parallel test execution is fine but we should remember about things like:
1. To avoid first situation which you described, we should remember that our tests will fail if during the test child thread will be spawn and this child thread will refer to driver kept in ThreadLocal.
2. Our test should clean driver from threadlocal after test method execution and setup driver before test method execution to avoid reusing driver from earlier execution.