Bitcoin HD Wallets with hardened derivation and watch-only addresses I'm learning about the details of how HD wallets work. After reading the BIP32 and BIP44 documents thoroughly and supplementing it with Mastering Bitcoin there's still on aspect that I can't figure out. 

Say I derive an extended private key with the BIP44 first account, first address path path: m/44'/0'/0'/0/0 and then I convert the extended private key into an extended public key.

Based on what I've read so far proper way would be to take the extended public key and work with an entirely non-hardened path like: M/0/1 , M/0/2 ?

Is this the correct way to do it ? My problem is that a public key of M/44'/0'/0'/0/1 will not be the same as M/0/1. 

I'm just trying to make sure I'm using the derivation paths correctly. Thanks a lot!
Use the master key (call it m) to derive m/44'/0'/0'. This will give you a pair of public/private keys, let's call them xpub-a and xprv-a.
Now you can take xpub-a onto your online machine, and use xpub-a to derive receive addresses (xpub-a/0/0, xpub-a/0/1, etc) and change addresses (xpub-a/1/0, xpub-a/1/1, etc).
In this way, you've used hardened derivation concatenated with non-hardened derivation for your change and receive addresses. Your final addresses from the path of your master key (m), will then be:
Receive addresses:
m/44'/0'/0'/0/0
m/44'/0'/0'/0/1
... etc.
and Change addresses:
m/44'/0'/0'/1/0
m/44'/0'/0'/1/1
...etc...
Example using bip32:

let master = bip32.fromBase58('xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi')
let final = master.derivePath(&quot;m/44'/0'/0'/0/0&quot;)
let middle = master.derivePath(&quot;m/44'/0'/0'&quot;).neutered() // &quot;neutered&quot; removes the private key
let final2 = middle.derivePath(&quot;0/0&quot;);
// observe that final.neutered().toBase58() === final2.toBase58()