In that case I would use a 3D array where X is the difficulty level, Y is the Enemy ID and Z is the Attribute.
Example (in JSON format):
> [50,150,10], [75,100,25]
Each line is a difficulty level (Easy(line 3), Normal(line 6) and Hard(line 9)).
Each block in a line ([50,150,10] for instance) is an enemy. In this list there are 2 enemies.
And each item in the block is an attributes (Let's say Life, Speed and Damage for this example)
First enemy is weaker and causes less damage, but is faster than the second. In Easy difficulty, for instance Enemy 1 has 50 life, 150 speed and 10 damage, while Enemy 2 has 75 life, 100 speed and 25 damage.
This way, when you create an enemy just access the values in the array for the corresponding difficulty and enemy using array.At(difficulty, enemyId, attributeId).
Let's say the difficulty is HARD and you are spawning a Enemy of the second type. Its life would be enemiesArray.At(2, 1, 0), its speed would be enemiesArray.At(2, 1, 1) and its damage would be enemiesArray.At(2, 1, 2).
Check this example. It will ask for the difficulty the first time and afterwards it would just use the one saved. It will also list the picked difficulty and the attributes for each enemy at each difficulty.
Thank you very much for this detailed post and for the capx, really appreciated. Let's see how far I pull from this logic as this logic is kind of pro for me.