Armor stands (like all other living entities) should check if they are invulnerable first before checking anything else when damaged.
Armor stands (unlike any other living entity) requests NonLivingEntityDamageEvent handle and checks if it is canceled before anything else.
Steps to reproduce:
1. Spawn an armor stand using either org.bukkit.World#spawn method, org.bukkit.World#spawnEntity, or spawning manually through NMS classes.
2. Set either or both of the invulnerable and marker properties to true.
3. Damage the armor stand in any way.
Paper version git-Paper-175 (MC: 1.14.4) (Implementing API version 1.14.4-R0.1-SNAPSHOT)
The issue is at net.minecraft.server.v_?.EntityArmorStand#damageEntity.
Take a look at the differences between this method and net.minecraft.server.v_?.EntityLiving#damageEntity.
Pretty sure whoever coded this was trolling since it doesn't match any of the other damageEntity methods from other classes extending EntityLiving.
(It may also be worth checking net.minecraft.server.v1_14_R1.EntityLiving#damageEntity0 and
net.minecraft.server.v1_14_R1.EntityArmorStand#e, the latter of these is missing its de-obfuscated name as well)