We currently check multiple dynamic attribute providers for the attribute ID, even after it has been removed (which can free the name). This was used as a simple way to remove multiple attributes with the same name (dealing with name collisions). However, that doesn't happen in practice at this point, since so much code has moved to the attribute API which checks for it.