Pronunciation for vowels such as ㅐ, ㅡ, and ㅏ assume the consonant ㅇ, sounding identical to 애, 으, and 아. In what way is the consonant ㅇ special from others?
Simply writing ㅐ, ㅡ, or ㅏ is incorrect in terms of how syllable blocks are expected to be written in Korean. All syllable blocks contain a beginning consonant and a vowel (or compound vowel) to follow it. The 받침 is optional.
It's special in the fact it allows vowel-only sounds to legally exist in Korean sentences. Of course, keep in mind that it has other properties (allows re-syllabification, creates a distinct '-ng' sound as a 받침).
ㅇ in inital position is now a filler letter for syllables which lack a inital consonant. But it was not 600 years ago.
In 1443, when Hangul was designed, King Sejong, the inventor of Hangul, had made three characters which corresponds to ㅇ of today. They were ㆁ, ㅇ(same as today), and ㆆ(small horizontal stroke on the top).
ㆁ is called 옛이응 now, Literally "old ieung". Notice the small vertical stroke on the top. It originally indicated /ŋ/(sing) sound. Its original name was ᅌᅵ으ᇰ (/ŋiɨŋ/) (first attested in book <훈몽자회>(1527)). Notice that /ŋ/ was legal in inital position.
ㅇ is called 이응 now. But in the 16th century, it was called 이 (/ɦi/). It originally indicated /ɦ/, a voiced /h/ sound. As you can infer from the name, it could not be put on final position.
ㆆ is called 여린히읗 now. It originally indicated /ʔ/, the uh-oh sound. This sound didn't exist in the Korean language even then, so it had went out of use before the 16th century.
Then, as time went on, people started to not pronounce /ŋ/ in initial position. Also people increasingly could not distinguish between a /ɦ/ and no consonant. So, due to these sound changes and the similarity of the letter shapes caused people to constantly mix up these two characters, ㆁ and ㅇ.
At last, the two characters merged, its name being 이응 /iɨŋ/ from the ㆁ's name, and its sound /ŋ/ at the final position, and no sound at the initial position.
The current-day interpretation is that all consonant names follow a general pattern, *ㅣ*ㅡ* (* = consonant). So substituting ㅇ into the consonant spots gives 이응.